import 'reflect-metadata' // 获取元数据支持

// 给 MyClass 类添加一个 data 元数据 值是 { x: 50, y: 50 }
@Reflect.metadata('data', { x: 50, y: 50 })
// 给 MyClass 类添加一个 z 元数据 值是 100
@Reflect.metadata('z', 100)
class MyClass {
  private myProperty: String
  // 给 name 属性添加一个 address 元数据 值是 'zf'
  @Reflect.metadata('address', 'zf')
  name = 'zs'

  constructor(value: string) {
    this.myProperty = value
  }

  // 给 myMethod 添加一个 data1 的元数据 其中值是 { a: 1, b: 2 }
  @Reflect.metadata('data1', { a: 1, b: 2 })
  // 给 myMethod 添加一个 data2 的元数据 其中值是 'c'
  @Reflect.metadata('data2', 'c')
  myMethod() {
    console.log('执行 myMethod')
  }
}

const instance = new MyClass('hello')



// 给 instance 对象添加一个 myProperty1 的元素数据 元素数据的值是一个对象 { key1: 'value1' }
Reflect.defineMetadata('key1', 'value1', instance, 'myProperty1')

// 往 instance 对象的 myProperty1 的元数据追加属性 { key1: 'value1', key2: 'value2' }
Reflect.defineMetadata('key2', 'value2', instance, 'myProperty1')

// 给 instance 对象添加一个 foo 的元素数据 值是 'bar'
Reflect.defineMetadata('foo', 'bar', instance)

